"""
切片模式：[start:end:step]
    第一个数字start表示切片开始位置，默认为0；
    第二个数字end表示切片截止（但不包含）位置（默认为列表长度）；
    第三个数字step表示切片的步长（默认为1）。
    当start为0时可以省略，当end为列表长度时可以省略，
    当step为1时可以省略，并且省略步长时可以同时省略最后一个冒号。
    另外，当step为负整数时，表示反向切片，这时start应该比end的值要大才行。
"""


def use_slice():
    company_list = ["Google", "Amazon", "Apple", "Alibaba", "Netflix"]

    # 取值
    # 返回包含原列表中所有元素的新列表
    print(company_list[::])
    # 输出结果：
    """
    ['Google', 'Amazon', 'Apple', 'Alibaba', 'Netflix']
    """

    # 返回包含原列表中所有元素的逆序列表
    print(company_list[::-1])
    # 输出结果：
    """
    ['Netflix', 'Alibaba', 'Apple', 'Amazon', 'Google']
    """

    # 隔一个取一个，获取偶数位置的元素
    print(company_list[::2])
    # 输出结果：
    """
    ['Google', 'Apple', 'Netflix']
    """

    # 隔一个取一个，获取奇数位置的元素
    print(company_list[1::2])
    # 输出结果：
    """
    ['Amazon', 'Alibaba']
    """

    # 指定切片的开始和结束位置（前闭后开）
    print(company_list[1:3])
    # 输出结果：
    """
    ['Amazon', 'Apple']
    """

    # 切片结束位置大于列表长度时，从列表尾部截断
    print(company_list[0:10])
    # 输出结果：
    """
    ['Google', 'Amazon', 'Apple', 'Alibaba', 'Netflix']
    """

    # 切片开始位置大于列表长度时，返回空列表
    print(company_list[10:])
    # 输出结果：
    """
    []
    """

    # 赋值
    # 在列表尾部增加元素
    company_list[len(company_list):] = ["Microsoft"]
    print(company_list)
    # 输出结果：
    """
    ['Google', 'Amazon', 'Apple', 'Alibaba', 'Netflix', 'Microsoft']
    """

    # 在列表头部插入元素
    company_list[:0] = ["Tesla"]
    print(company_list)
    # 输出结果：
    """
    ['Tesla', 'Google', 'Amazon', 'Apple', 'Alibaba', 'Netflix', 'Microsoft']
    """

    # 在列表中间位置插入元素
    company_list[3:3] = ["SpaceX"]
    print(company_list)
    # 输出结果：
    """
    ['Tesla', 'Google', 'Amazon', 'SpaceX', 'Apple', 'Alibaba', 'Netflix', 'Microsoft']
    """

    # 替换列表元素，等号两边的列表长度相等
    company_list[:2] = ['Google', 'Tesla']
    print(company_list)
    # 输出结果：
    """
    ['Google', 'Tesla', 'Amazon', 'SpaceX', 'Apple', 'Alibaba', 'Netflix', 'Microsoft']
    """

    # 等号两边的列表长度也可以不相等
    company_list[2:] = ['Amazon', 'SpaceX', 'Apple', 'Alibaba', 'Netflix']
    print(company_list)
    # 输出结果：
    """
    ['Google', 'Tesla', 'Amazon', 'SpaceX', 'Apple', 'Alibaba', 'Netflix']
    """

    # 隔一个修改一个
    company_list[::2] = ["GOOG"] * 4
    print(company_list)
    # 输出结果：
    """
    ['GOOG', 'Tesla', 'GOOG', 'SpaceX', 'GOOG', 'Alibaba', 'GOOG']
    """

    # 隔一个修改一个
    company_list[::2] = ["Netflix", "Google", "Apple", "Amazon"]
    print(company_list)
    # 输出结果：
    """
    ['Netflix', 'Tesla', 'Google', 'SpaceX', 'Apple', 'Alibaba', 'Amazon']
    """

    # 左侧切片不连续，等号两边列表长度必须相等
    company_list[::2] = ["Netflix", "Apple", "Google", "Amazon"]
    print(company_list)
    # 输出结果：
    """
    ['Netflix', 'Tesla', 'Apple', 'SpaceX', 'Google', 'Alibaba', 'Amazon']
    """

    # 删除列表中前3个元素
    company_list[:3] = []
    print(company_list)
    # 输出结果：
    """
    ['SpaceX', 'Google', 'Alibaba', 'Amazon']
    """

    # 删除
    # 删除元素（切片元素连续）
    del company_list[:1]
    print(company_list)
    # 输出结果：
    """
    ['Google', 'Alibaba', 'Amazon']
    """

    # 删除元素（切片元素不连续，隔一个删一个）
    del company_list[::2]
    print(company_list)
    # 输出结果：
    """
    ['Alibaba']
    """


if __name__ == '__main__':
    use_slice()
